package main

import (
	"log"
	"time"

	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

type User struct {
	Id        int64  `orm:"column(uid);pk;auto"`
	Name      string `orm:"size(64);default(aaa)"`
	Password  string ``
	Sex       bool
	Height    float64    `orm:"digits(12);decimals(3)"`
	Tel       string     `orm:"index";unique`
	Addr      string     `orm:"type(text)"`
	Birthday  *time.Time `orm:"type(date)"`
	CreatedAt *time.Time `orm:auto_now_add;description(创建时间)`
	UpdatedAt *time.Time `orm:auto_now`
	DeletedAt *time.Time `orm:"null"`
}

// 修改表名 一般不用
// func (u *User) TableName() string {
// 	return "user_aaa"
// }

func (u *User) TableIndex() [][]string {
	return [][]string{
		{"Name"},
		{"Password"},
		{"Tel", "Addr"},
	}
}

func main() {
	// 导入驱动
	// 导入orm包
	// 再orm包中注册驱动（mysql自动注册）
	orm.RegisterDriver("mysql", orm.DRMySQL) //自动注册，可以省略
	// 注册数据库（配置信息）
	dsn := "golang:zxc,./123@tcp(43.139.115.142:3306)/testorm?charset=utf8mb4&loc=Local&parseTime=true"
	////default 别名 必须要一个默认的别名，mysql 类型 与驱动名对应，dsn 连接信息

	if err := orm.RegisterDataBase("default", "mysql", dsn); err != nil {
		log.Fatal(err)
	}
	// 注册模型（结构体）
	orm.RegisterModel(&User{}) // 必须指针类型实例
	// 操作
	// DDL DML DQL

	// DDL 只会添加列不会删除
	// 同步数据库，检查结构体对应的表是否存在，如果不存在创建对应的表
	// 表存在会检查属性列是否再表中存在，如果不存在会添加列
	// 检查索引是否存在，不存在添加
	// orm.RunSyncdb("default", false, true) // default 别名，第二个参数是否执行的时候先删除表，第三个显示详情信息

	//

}
